package array;

/**
 * 「无零整数」是十进制表示中 不含任何 0 的正整数。
 * 给你一个整数 n，请你返回一个 由两个整数组成的列表 [a, b]，满足：
 * a 和 b 都是无零整数
 * a + b = n
 * 题目数据保证至少有一个有效的解决方案。
 * 如果存在多个有效解决方案，你可以返回其中任意一个。
 * <p>
 * 示例 1：
 * 输入：n = 2
 * 输出：[1,1]
 * 解释：a = 1, b = 1。a + b = n 并且 a 和 b 的十进制表示形式都不包含任何 0。
 * <p>
 * 示例 2：
 * 输入：n = 11
 * 输出：[2,9]
 * <p>
 * 示例 3：
 * 输入：n = 10000
 * 输出：[1,9999]
 * <p>
 * 示例 4：
 * 输入：n = 69
 * 输出：[1,68]
 * <p>
 * 示例 5：
 * 输入：n = 1010
 * 输出：[11,999]
 *
 * @author Jisheng Huang
 * @version 20250421
 */
public class GetNoZeroIntArray_1317 {
    /**
     * We have to get an integer array with 2 non-zero integers which sums as n
     *
     * @param n given integer number
     * @return an integer array which sums up to n
     */
    public static int[] getNoZeroIntegers(int n) {
        int[] res = new int[2];

        // n <= 10的情况
        if (n <= 10) {
            res[0] = 1;
            res[1] = n - 1;

            return res;
        }

        // //求数字n的十进制长度
        int length = (int) Math.log10(n);

        // 数字res[0]中每一位都是9,res[1]是与res[0]互补的数
        res[0] = (int) Math.pow(10, length) - 1;
        res[1] = n - res[0];

        // 判断res[1]中十进制某一位是否为0
        int temp = res[1];
        int index = 1;

        while (temp > 0) {
            //如果res[1]某一位为0，则res[1]该位加上1，res[0]该位减去1
            if (temp % 10 == 0) {
                res[0] -= index;
                res[1] += index;
            }

            index *= 10;
            temp /= 10;
        }

        return res;
    }

    public static void main(String[] args) {
        int[] ans = getNoZeroIntegers(11);
        System.out.println(ans[0] + " " + ans[1]);

        ans = getNoZeroIntegers(10000);
        System.out.println(ans[0] + " " + ans[1]);
    }
}
